将文本预先添加到制表符分隔文件中的特定列?

时间:2012-06-25 18:31:04

标签: bash sed awk

我有一个这样的文件(制表符分隔),但很多行

1314    0   0   0   0   0   3   1321    -   k63_1878003 1314    0   1314    6   171115067   64288422    64291057    4   12,131,75,1096, 0,12,143,218,   64288422,64288802,64289161,64289961,

我需要在每行的第14列前加string,但保持其他所有内容相同。我可以在awk中这样做,还是在sed中会更好?

4 个答案:

答案 0 :(得分:12)

使用awkOFS在输出中的字段之间打印选项卡:

awk 'BEGIN { OFS = "\t" } { $14 = "string" $14; print }' infile

答案 1 :(得分:1)

$ cat file.txt | sed 's/\(\([^\t]\+\t\)\{13\}\)/\1string/g'

换句话说:使用相同的文字和(([^ ] +){13})替换string(十三个非标签块,后跟标签)。

答案 2 :(得分:1)

这可能适合你(GNU sed):

sed 's/[^\t]*/string&/14' file

答案 3 :(得分:0)

您可以使用连接附加到AWK中的字段。例如:

$ echo "foo bar baz" | awk -vOFS=$'\t' '$2 = "quux" $2'
foo quuxbar baz

在你的情况下,你显然会使用$ 13字段。通过更改模式部分而不是操作,您只需替换字段的值并使用该行的默认打印操作。