3

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

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,

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

4

4 回答 4

12

使用awk. OFS在输出中的字段之间打印一个选项卡:

awk 'BEGIN { OFS = "\t" } { $14 = "string" $14; print }' infile
于 2012-06-25T19:06:00.570 回答
1
$ cat file.txt | sed 's/\(\([^\t]\+\t\)\{13\}\)/\1string/g'

换句话说:用(([^ ] +){13})相同的文本替换(十三个非制表符块,后跟制表符),加上你的string.

于 2012-06-25T18:57:11.770 回答
1

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

sed 's/[^\t]*/string&/14' file
于 2012-06-25T19:11:46.757 回答
0

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

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

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

于 2012-06-25T19:03:57.307 回答