Подтвердить что ты не робот

Печать всех полей с AWK, разделенных OFS

Есть ли способ распечатать все записи, разделенные OFS, без ввода каждого номера столбца.

#Desired style of syntax, undesired result
[[email protected]: ~] echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-( "}; {print $0}'        
1 2 3 4

#Desired result, undesired syntax
[[email protected]: ~] echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-) "}; {print $1,$2,$3,$4}'
1 :-) 2 :-) 3 :-) 4
4b9b3361

Ответ 1

Это вариант первого стиля:

echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-( "}; {$1=$1; print $0}'

Результаты:

1 :-( 2 :-( 3 :-( 4

Объяснение:

$1=$1 состоит в том, чтобы перестроить запись, используя текущий OFS (вы также можете увидеть http://www.gnu.org/software/gawk/manual/gawk.html#Changing-Fields)

Update:

(предложенный @EdMorton и @steve). Это краткая эквивалентная версия awk-команды, которая устанавливает OFS в командной строке и использует print $0 как действие по умолчанию:

awk -v OFS=" :-( " '{$1=$1}1'

Ответ 2

Sed-эквивалент:

$ echo "1 2 3 4" | sed 's/ /:-)/g'

Вот еще один вариант с awk:

$ echo "1 2 3 4" | awk '{ gsub(/\s/, ":-)")}1'