아래와 같은 파일이 있습니다.
"ID" "1" "2"
"00000687" 0 1
"00000421" 1 0
내가하고 싶은 일은 다음과 같습니다.
00000687 0 1
00000421 1 0
나는 원해요
- 첫 번째 줄을 삭제하고
- 다른 줄의 필드에서 큰따옴표를 제거합니다. FWIW, 큰따옴표는 첫 번째 열에만 나타납니다.
가능하다고 생각 cut -c
하지만 불가능합니다. 어떻게 해야 합니까?
답변1
tail
+ tr
:
tail -n +2 file | tr -d \"
tail -n+2
두 번째 줄부터 끝까지 파일을 인쇄합니다. tr -d \"
큰따옴표를 모두 제거하세요.
답변2
이것은 작동합니다:
sed -i '1d;s/"//g' filename
설명하다:
-i
파일을 제자리에서 수정합니다.1d
첫 번째 행을 삭제합니다s/"//g
"
파일의 모든 내용이 삭제됩니다.
먼저 시도하지 않고 시도하면 -i
출력이 표준 출력으로 인쇄됩니다.
답변3
제목에 표시된 문제를 해결하려면, 즉 공백으로 구분된 첫 번째 열에서만 큰따옴표를 제거하십시오.
awk -F ' ' '{ gsub("\"", "", $1) }; NR > 1' file
이 gsub()
명령을 사용하여 각 줄의 첫 번째 필드에 있는 큰따옴표를 모두 제거합니다. 최종 NR > 1
보증은 첫 번째 줄을 인쇄하지 않습니다.
첫 번째 필드에서 큰따옴표를 제거하려면(해당 필드의 첫 번째 및 마지막 문자로 나타나는 경우에만) 다음을 수행하십시오.
awk -F ' ' '$1 ~ /^".*"$/ { $1 = substr($1, 2, length($1) - 2) }; NR > 1' file
이는 정규식을 사용하여 ^".*"$
첫 번째 필드의 시작과 끝에 큰따옴표가 있는지 감지하고, 그렇다면 substr()
문자열의 내부 부분을 추출하는 블록을 트리거합니다. 필드의 모든 내부 큰따옴표는 유지됩니다.
답변4
원하는 출력을 얻는 방법에는 여러 가지가 있으며 그 중 하나는 cut -c
추출할 문자 범위를 정의하고 출력을 tail --lines=+2
명령으로 파이프하여 헤더(첫 번째 줄)를 제거하는 것입니다. 예를 들어:
cut -c2-9,11-14 <your_file_name> | tail --lines=+2
이 -c2-9,11-14
옵션은 2~9(ID 열의 문자 위치) 및 11~14(' " '를 제외한 모든 문자의 문자 위치) 범위의 문자 위치를 정의합니다.
이 tail --lines=+2
명령은 파일의 모든 줄을 인쇄하지만 두 번째 줄부터 시작합니다.
cut
명령 에 대한 자세한 내용을 보려면 다음을 방문하세요.장소.