Man*_*nde 5 unix shell awk sed
我正在为以下命令寻找其他替代方案/更智能的1个衬管,它应该为所请求的列号添加一个值.我尝试按照以下sed命令正常工作,将值4添加到第4列.[需要:因为我有这样的文件,其中包含1000条记录,很多次我需要在任何位置添加一列.]我的approch仅适用于较小规模.
cat 1.txt
1|2|3|5
1|2|3|5
1|2|3|5
1|2|3|5
Run Code Online (Sandbox Code Playgroud)
sed -i 's/1|2|3|/1|2|3|4|/g' 1.txt
cat 1.txt
1|2|3|4|5
1|2|3|4|5
1|2|3|4|5
1|2|3|4|5
Run Code Online (Sandbox Code Playgroud)
thansk提前.
sli*_*nov 11
字段分隔符
http://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html
String Concatenation
http://www.gnu.org/software/gawk/manual/html_node/Concatenation.html
默认模式和行动
http://www.gnu.org/software/gawk/manual/html_node/Very-Simple.html
awk -v FS='|' -v OFS='|' '{$3=$3"|"4} 1' 1.txt
Run Code Online (Sandbox Code Playgroud)
一种方式使用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
Run Code Online (Sandbox Code Playgroud)
输出如下:
1|2|3|four|5
1|2|3|four|5
1|2|3|four|5
1|2|3|four|5
Run Code Online (Sandbox Code Playgroud)