输入是一个以制表符分隔的文件(此处为空格,但无论如何):
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首选,但无论如何......
答案 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"