bash awk первый 1-й столбец и 3-й столбец со всем после
Я работаю над следующим скриптом bash:
# contents of dbfake file
1 100% file 1
2 99% file name 2
3 100% file name 3
#!/bin/bash
# cat out data
cat dbfake |
# select lines containing 100%
grep 100% |
# print the first and third columns
awk '{print , }' |
# echo out id and file name and log
xargs -rI % sh -c '{ echo %; echo "%" >> "fake.log"; }'
exit 0
этот скрипт работает нормально, но как я могу распечатать все в столбце $3, а затем все столбцы после?
5 ответов
если вы не возражаете немного пробелов:
awk '{ ="" }1'
но UUOC и grep
:
< dbfake awk '/100%/ { ="" }1' | ...
если вы хотите, чтобы обрезать пробелы:
< dbfake awk '/100%/ { =""; sub(FS "+", FS) }1' | ...
для удовольствия, вот еще один способ с помощью GNU sed
:
< dbfake sed -r '/100%/s/^(\S+)\s+\S+(.*)//' | ...
другие ответили по-разному, но я хочу указать, что использование xargs для мультиплексного вывода довольно плохая идея.
вместо этого, почему бы вам не:
awk '=="100%" { sub("100%[[:space:]]*",""); print; print >>"fake.log"}' dbfake
вот и все. Вам не нужен grep, вам не нужно несколько труб, и определенно вам не нужно вилять оболочку для каждой строки, которую вы выводите.
вы могли бы сделать awk ...; print}' | tee fake.log
, но нет большого смысла в раздвоении тройника, если awk может справиться с этим.