#!/usr/bin/env bash
cat > example_file.txt <<EOL
group, , price
1, value, 3.21
1, 3.42, 4.11
1, 3.5, 1.22
2, 4.1, 9.2
2, 4.2, 2.11
EOL
我想用第二行第二列的值替换此文件第一行第二列的值。因此我希望 awk 返回以下内容:
#!/usr/bin/env bash
cat > example_file.txt <<EOL
group, value, price
1, value, 3.21
1, 3.42, 4.11
1, 3.5, 1.22
2, 4.1, 9.2
2, 4.2, 2.11
EOL
我找不到如何在 awk 中引用下一行:
cat example_file.txt | awk -F, 'BEGIN { OFS = FS } { if (NR==1) $2 = ??}'
答案1
您可以使用getline
来获取下一行输入,并split
使用当前将其拆分为字段数组FS
:
$ awk -F, 'BEGIN { OFS = FS } NR==1 && (getline ln) > 0 { split(ln,a); $2 = a[2]} 1' example_file.txt
group, value, price
1, 3.42, 4.11
1, 3.5, 1.22
2, 4.1, 9.2
2, 4.2, 2.11
如果您还想打印“got”行,ln
拆分后它仍然存在(为了获得正确的顺序,我们还需要print
首先明确地使用 ,并跳过默认打印next
):
$ awk -F, '
BEGIN { OFS = FS }
NR==1 && (getline ln) > 0 { split(ln,a); $2 = a[2]; print; print ln; next} 1
' example_file.txt
group, value, price
1, value, 3.21
1, 3.42, 4.11
1, 3.5, 1.22
2, 4.1, 9.2
2, 4.2, 2.11