Shell 在unix中[使用awk或sed]向文件中的任何位置添加列
我正在为下面的命令寻找其他替代方案/更智能的1行程序,它应该为请求的列号添加一个值。 我试着按照下面的sed命令正确地为第4列添加值4。 [需要:因为我有这样一个包含1000条记录的文件&很多时候,我需要在任何位置的中间添加一列。] 我的方法只适用于小规模Shell 在unix中[使用awk或sed]向文件中的任何位置添加列,shell,unix,sed,awk,Shell,Unix,Sed,Awk,我正在为下面的命令寻找其他替代方案/更智能的1行程序,它应该为请求的列号添加一个值。 我试着按照下面的sed命令正确地为第4列添加值4。 [需要:因为我有这样一个包含1000条记录的文件&很多时候,我需要在任何位置的中间添加一列。] 我的方法只适用于小规模 cat 1.txt 1|2|3|5 1|2|3|5 1|2|3|5 1|2|3|5 1|2|3|4|5 1|2|3|4|5 1|2|3|4|5 1|2|3|4|5 sed-i's/1 | 2 | 3 |/1 | 2 | 3 | 4 |/g
cat 1.txt
1|2|3|5
1|2|3|5
1|2|3|5
1|2|3|5
1|2|3|4|5
1|2|3|4|5
1|2|3|4|5
1|2|3|4|5
sed-i's/1 | 2 | 3 |/1 | 2 | 3 | 4 |/g'1.txt
1|2|3|5
1|2|3|5
1|2|3|5
1|2|3|5
1|2|3|4|5
1|2|3|4|5
1|2|3|4|5
1|2|3|4|5
cat 1.txt
1|2|3|5
1|2|3|5
1|2|3|5
1|2|3|5
1|2|3|4|5
1|2|3|4|5
1|2|3|4|5
1|2|3|4|5
提前完成任务。单向使用
awk
。向脚本传递两个参数:列号和要插入的值。脚本增加字段的数量(NF
),并遍历最后一个字段,直到指定的位置,然后在那里插入新值
运行以下命令:
awk -v column=4 -v value="four" '
BEGIN {
FS = OFS = "|";
}
{
for ( i = NF + 1; i > column; i-- ) {
$i = $(i-1);
}
$i = value;
print $0;
}
' 1.txt
具有以下输出:
1|2|3|four|5
1|2|3|four|5
1|2|3|four|5
1|2|3|four|5
字段分隔符
字符串串联
默认模式和操作
使用
coreutils
和过程替换的一种方法:
sed 's/3|/3|4|/' 1.txt
f=1.txt
粘贴-d'|'\
一种方法是使用coreutils和过程替换:
sed 's/3|/3|4|/' 1.txt
实际上,这个答案中没有过程替换。看起来你从中复制了该标题,可能没有理解它。(是否sed
coreutil?)