Строки в столбцы с последней строкой awk - PullRequest
0 голосов
/ 24 мая 2018

У меня есть несколько папок, каждая из которых содержит текстовый файл, который я хотел бы переместить (преобразовать строки в столбцы) в Bash.Я установил это с помощью awk внутри цикла for, однако у меня есть проблема с последней строкой, которая никогда не переставляется правильно.

Это мой файл input.txt

ID1 11208   13391   16070   19383
ID2 6691    8489    8723    7493
ID3 5768    6004    7754    7614

Это мой файл output.txt с ошибкой.

ID1 ID2 ID3
11208   6691    5768
13391   8489    6004
16070   8723    7754
19383       
7493    
7614    

Это то, что я хочу

ID1 ID2 ID3
11208   6691    5768
13391   8489    6004
16070   8723    7754
19383   7493    7614

Мой лайнер awk one:

input.txt | awk '{for(i=1; i<=NF; i++) A[i]=A[i] (NR>1?OFS:x) $i} END{for(i=1; i<=NR; i++) print A[i]}' OFS="\t" > output.txt

Спасибо всем заранее за ваше время

1 Ответ

0 голосов
/ 24 мая 2018

После awk может вам помочь.

awk '
!a[$1]++{
  val=val?val OFS $1:$1}
{
  for(i=2;i<=NF;i++){
    b[FNR,i]=$i}
}
END{
  print val;
  for(j=2;j<=NF;j++){
    for(k=1;k<=FNR;k++){
      printf("%s%s",b[k,j],k==FNR?ORS:OFS)}
}}
'   Input_file

РЕДАКТИРОВАТЬ: Спасибо @jas за указание этой точки здесь:

@ OP: Проверьте здесь, если у вас есть конечные строки DOS, выполнив:

cat -v Input_file

Если вы видите контрольные символы M, выполните следующие действия, чтобы удалить их.

tr -d '\r' < Input_file > temp_file && mv temp_file Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...