将一列选项卡添加到以制表符分隔的文件中

时间:2013-08-21 12:46:00

标签: bash sed awk

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

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首选,但无论如何......

6 个答案:

答案 0 :(得分:3)

这可能适合你(GNU sed):

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

或:

awk '{sub(/\t/,"&&")}1' file

答案 1 :(得分: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

答案 2 :(得分:1)

sed 's/<TAB>/<TAB><TAB>/' file

答案 3 :(得分:0)

由于您希望在第一列之后有两个标签:

 sed 's/\([^ \t]*\) \([^ \t]*\)/\1\t\2/g' foo.txt | sed 's/\t/\t\t/'

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

Pure 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"