0

输入是一个制表符分隔的文件(这里是空格,但无论如何):

Sample1 ACGGGGCGCAGCAGGCGCGA text other122
something ABCDSDDADASDASDSAD hjas 23823sss
ahsdksads AHJHJDHSJHJDALKDLK hello world

我想要做的是在第一列之后添加一列选项卡。所以基本上:

Sample1<TAB><TAB>ACGGGGCGCAGCAGGCGCGA<TAB>text<TAB>other122
something<TAB><TAB>ABCDSDDADASDASDSAD<TAB>hjas<TAB>23823sss
ahsdksads<TAB><TAB>AHJHJDHSJHJDALKDLK<TAB>hello<TAB>world

sed/awk 首选,但无论如何..

4

6 回答 6

3

这可能对您有用(GNU sed):

sed 's/\t/&&/' file

或者:

awk '{sub(/\t/,"&&")}1' file
于 2013-08-21T13:16:19.117 回答
1

那这个呢?

$ awk 'BEGIN{OFS=FS="\t"} $2="\t"$2' file
Sample1         ACGGGGCGCAGCAGGCGCGA text other122
something       ABCDSDDADASDASDSAD hjas 23823sss
ahsdksads       AHJHJDHSJHJDALKDLK hello world

这与awk 'BEGIN{OFS=FS="\t"} $1=$1"\t"'. 也就是说,它将一个制表符附加到第一个字段的末尾或第二个字段的开头。

$ awk 'BEGIN{OFS=FS="\t"} $2=FS$2' file
于 2013-08-21T12:47:23.267 回答
1
sed 's/<TAB>/<TAB><TAB>/' file
于 2013-08-21T12:47:55.783 回答
0

纯 bash 解决方案:

filename='file.txt'
tempFile="/tmp/my_script_$RANDOM"
while read -r line; do
    printf "%s\n" "${line/  /       }" >> "$tempFile" # should be ${line/<TAB>/<TAB><TAB>}
done < "$filename"
mv -f -- "$tempFile" "$filename"
于 2013-08-21T15:12:16.003 回答
0

您将输出字段分隔符更改为一个选项卡,并在第一个元素之后添加一个额外的选项卡:

awk -v 'OFS=\t' '$1=$1"\t"'

于 2013-08-21T12:54:23.993 回答
0

由于您需要第一列之后的两个选项卡:

 sed 's/\([^ \t]*\) \([^ \t]*\)/\1\t\2/g' foo.txt | sed 's/\t/\t\t/'
于 2013-08-21T12:49:49.613 回答