
파일에 다음 값이 있습니다.
line 1: 31915
line 2: Salchipapa|papa|salchicha|aceite|queso
papa, salchicha, aceite, queso 값을 가져와야 합니다.
즉, 2행, 2열에서 값을 가져와야 합니다.
답변1
IFS
나중에 사용할 수 있도록 변경하고 보관하여 모든 것을 배열로 읽을 수 있습니다 ....
OIFS=$IFS; IFS='|'; array=($(sed '2q;d' "$filename")); IFS=$OIFS
echo ${array[0]}
Salchipapa
echo ${array[1]}
papa
이렇게 하면 임의의 10개 값으로 제한되지 않으며 배열의 요소 수를 알고 있으므로 나중에 'null'을 테스트할 필요도 없습니다....
echo ${#array[@]}
5
그럼 당신은 그냥 ....
for (( i=0; i<${#array[@]}; i++ )); do echo ${array[$i]}; done
Salchipapa
papa
salchicha
aceite
queso
답변2
나는 이렇게 했고 효과가 있었다:
for i in {2..10}
do
ingName=$(sed -n 2p $filename | cut -d '|' -f $i)
done
"sed -n 2p $filename"은 파일의 두 번째 줄을 가져온 다음 "cut -d '|' -f $i"는 파이프로 구분된 각 성분을 제공합니다. 숫자 10은 최대 10개의 재료가 있음을 나타내므로 나중에 코드에서 변수 ingName이 null이 아닌 경우에만 작업했음을 확인합니다.
답변3
실제 파일의 내용이 다음과 같다고 가정합니다.
31915
Salchipapa|papa|salchicha|aceite|queso
그럼 당신은 사용할 수 있습니다
awk -F '|' 'FNR == 2 { for (i=2; i<=NF; ++i) print $i }' file
두 번째 줄부터 두 번째 필드부터 출력 줄당 한 단어씩 필드를 인쇄합니다.
다음 sed
명령도 동일한 작업을 수행합니다.
sed '1d;2y/|/\n/;s/[^\n]*\n//' file
입력에서 첫 번째 줄을 삭제한 다음 모든 파이프를 줄 바꿈으로 변경하고 첫 번째 줄 바꿈까지(및 포함) 삭제하여 이를 수행합니다.
파이프라인
tail -n 1 file | cut -d '|' -f 2- | tr '|' '\n'
tail
를 사용하여 마지막 줄을 선택하고 를 사용 하여 두 번째부터 필드를 추출하여 예제 데이터가 제공된 것과 동일한 출력을 생성합니다.cut
다음 모든 파이프를 개행으로 변경하여 예제 데이터와 동일한 출력을 생성합니다.
위 내용의 변형:
tail -n 1 file | tr '|' '\n' | tail -n +2
답변4
아래 명령으로 시도했는데 잘 작동했습니다.
awk 'NR==2{print $NF}' filename| awk -F "|" '{$1="";print $0}' |sed -r "s/^\s+//g"| perl -pne "s/ /\n/g"
산출
papa
salchicha
aceite
queso