#!/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
Я хочу заменить значение в 1 строке, 2-м столбце этого файла значением в 2-й строке 2-й столбец. Таким образом, я надеюсь иметь возврат 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 = ??}'
Можно использовать 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
Если Вы хотите распечатать "полученную" строку также, это находится все еще в 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