[bash] bash 스크립트에서 파일의 첫 줄을 얻는 방법?

bash 변수에 파일의 첫 줄을 넣어야합니다. grep 명령을 사용하는 것 같지만 줄 수를 제한하는 방법이 있습니까?



답변

head파일에서 첫 번째 줄을 가져오고 -n매개 변수를 사용하여 추출 할 줄 수를 지정할 수 있습니다.

line=$(head -n 1 filename)


답변

bash를 사용하여 첫 번째 줄을 읽으려면 readstatement를 사용하십시오 . 예 :

read -r firstline<file

firstline 변수가 될 것입니다 (다른 것에 할당 할 필요가 없습니다)


답변

이것으로 filename변수 의 첫 줄을 충분하게 저장합니다 $line.

read -r line < filename

나는 또한 awk이것을 좋아 한다.

awk 'NR==1 {print; exit}' file

줄 자체를 저장하려면 var=$(command)구문을 사용하십시오 . 이 경우, line=$(awk 'NR==1 {print; exit}' file).

또는 심지어 sed:

sed -n '1p' file

동등 line=$(sed -n '1p' file)합니다.


readwith를 공급할 때의 샘플 seq 10, 즉 1에서 10까지의 숫자 시퀀스를 참조하십시오 .

$ read -r line < <(seq 10)
$ echo "$line"
1

$ line=$(awk 'NR==1 {print; exit}' <(seq 10))
$ echo "$line"
1


답변

line=$(head -1 file)

잘 작동합니다. (이전 답변). 그러나

line=$(read -r FIRSTLINE < filename)

read내장 bash 명령 처럼 약간 빠릅니다 .


답변

echo소스 파일의 첫 번째 목록 만 대상 파일에 추가하십시오.

echo $(head -n 1 source.txt) > target.txt


답변

질문은 어느 것이 가장 빠른지 묻지 않았지만 sed 답변에 추가하기 위해 패턴 공간이 여전히 큰 파일에서 스캔되므로 -n ‘1p’가 제대로 수행되지 않습니다. 호기심으로 나는 ‘head’가 sed를 좁게 이겼다는 것을 알았습니다.

# best:
head -n1 $bigfile >/dev/null

# a bit slower than head (I saw about 10% difference):
sed '1q' $bigfile >/dev/null

# VERY slow:
sed -n '1p' $bigfile >/dev/null


답변