awk에서 공백이나 탭으로 필드를 구분하는 방법


51

노는 동안 awk나는 처형했다.

ls -la >> a.txt ; awk {'print $5  $1'} a.txt ;

이것은 다음과 같은 출력을 제공합니다.

53277-rw-------
52347-rw-------

이 두 친구 사이에 공간을 확보하려면 어떻게해야합니까?


1
조언으로의 출력을 구문 분석해서는 안됩니다 ls. 이것은 조만간 등에 당신을 물 것입니다.
gniourf_gniourf 10

awk에서, 두 개의 줄을 연결하려면, 그것들을 나란히 배치하십시오 –print $5 $1
glenn jackman


2
@ kenorb 및 닫기 유권자, 연결된 중복은 전혀 중복되지 않습니다. 그들은 전제로 필드를 인쇄하는 방법을 이미 알고 있습니다 ( awk {'print $5 $1'} a.txt). 그들은 필드 # 1과 필드 # 5 사이에 공백을 넣는 방법을 묻습니다.
kos

답변:


72

그냥 라인을 변경하십시오

ls -la >> a.txt ; awk {'print $5 "        " $1'} a.txt ;

공백으로 출력을 인쇄해야합니다.

도움이 되었기를 바랍니다.

편집하다:

McNisse가 제안한대로 printf를 사용하면 좋은 출력 형식을 제공 할 수 있습니다

ls -la >> a.txt ; awk {'printf ("%5s\t%s\n", $5, $1)'} a.txt ;

4
printf기능은 특히 숫자 형식을 지정하려는 경우 더 나은 제어 기능을 제공합니다. printf("%s\t%s\n", $5, $1)
McNisse

위의 답변에 오타가 있습니까? 의 5s의미awk {'printf ("%5s\t%s\n", $5, $1)'}
Vishal

66

다른 awk 관련 기술인 "출력 필드 구분 기호"를 사용하십시오.

ls -la | awk -v OFS='\t' '{print $5, $1}'

쉼표는 여기서 중요합니다.


이 작동하지만 $1개행으로 이동 원인
loretoparisi

8

탭을 얻는 간단한 방법은 다음과 같습니다.

awk {'print $5"\t"$1'}

5

나는 이것이 오래된 스레드라는 것을 알고 있지만 단지 배우고 있으며이 게시물이 도움이된다는 것을 알았습니다. 가장 좋은 해결책은 gawk를 사용하여 변수 사이에 공백을 삽입하는 것이 었습니다.

ls -la | gawk '{print $1, $9}'

3
-1 : 새로운 것이 없습니다. gawk, mawk또는 다른 awk모든 쉼표를 사용하면 공백이 삽입됩니다 . 이 답변이 말합니다.
muru

1
이어야 ls -la | awk '{print $1, $9}'합니다. muru가 말했듯 gawk이 필요하지 않습니다.
닉 크로포드

1

인수 사이에 공백을 두려면을 추가하십시오 " "(예 :) awk {'print $5" "$1'}.

그러나 신뢰할 수없고 출력은 스크립트가 아니라 사람을위한 것이므로 command의 출력구문 분석하는 것은 권장 되지 않습니다. 따라서 다음과 같은 다른 명령을 사용 또는 .lsfindstat

다음은 GNU를 사용하는 예입니다 stat.

$ stat -t *
001.txt 23 8 81a4 501 20 1000004 242236402 1 0 0 1460260387 1460260239 1460260239 1460260194 4096
7c1c.txt 21 8 81a4 501 20 1000004 242236595 1 0 0 1460261322 1460260486 1460260486 1460260486 4096

기계 친화적 인 출력 (간결한 형태)을 인쇄하므로 필요한 것을 정확하게 얻을 수 있습니다. 그런 다음 사용할 -c특정 형식을 사용하거나 사용 awk, cut또는 read적절한 열을 얻을 수 있습니다.

stat --help추가 옵션을 확인하십시오 . 예를 들어 수정 날짜를 인쇄하려면 이 예를 확인 하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.