awk не печатает выходные значения в табличном формате - PullRequest
0 голосов
/ 05 июня 2018
awk  BEGIN{print "result1 result2  result3"} 'BEGIN{RS=","}{$1=$1}1' input.txt

result1 result2  result3
abc1    def1     ghi1 lmn1 opq1 rst1 abc2    def2     ghi2 lmn2 opq2 rst2

выше awk печатает все значения в одной строке и нужно печатать вывод в другой строке.abc1 def1 ghi1 lmn1 opq1 rst1 в одном ряду и abc2 def2 ghi2 lmn2 opq2 rst2 в другом ряду.Количество слов в строке не фиксировано (может быть 3 слова или более 3 слов)

input.txt:

abc1
def1
ghi1 lmn1 opq1 rst1

abc2
def2
ghi2 lmn2 opq2 rst2

Ожидаемый результат:

result1 result2  result3
abc1    def1     ghi1 lmn1 opq1 rst1
abc2    def2     ghi2 lmn2 opq2 rst2

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

РЕДАКТИРОВАТЬ: Поскольку OP изменил Input_file, поэтому здесь также нужно изменить код.

awk '
BEGIN{
  print "result1","result2","result3"}
NF{
  count++;val=val?val OFS $0:$0}
NF && count==3{
  print val;
  val=""}
END{
  if(val){
    print val}
}' OFS="\t"  Input_file

Вывод будет следующим.

result1 result2 result3
abc1    def1    ghi1 lmn1 opq1 rst1
abc2    def2    ghi2 lmn2 opq2 rst2

Здесь вам также могут помочь.

echo "result1 result2  result3";xargs -n 3 < Input_file | column -t
0 голосов
/ 05 июня 2018
$ cat tst.awk
BEGIN { RS="" }
NR==1 {
    for (i=1; i<=NF; i++) {
        printf "result%d%s", i, (i<NF ? OFS : ORS)
    }
}
{
    $1 = $1
    print
}

$ awk -f tst.awk file | column -t
result1  result2  result3
abc1     def1     ghi1
abc2     def2     ghi2
0 голосов
/ 05 июня 2018

если ваши записи разделены одной или несколькими пустыми строками, вы можете сделать это вместо

$ awk -v RS= 'BEGIN {print "result1","result2","result3"} 
                    {$1=$1}1' file | column -t

result1  result2  result3
abc1     def1     ghi1
abc2     def2     ghi2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...