파일 이름을 열 헤더로 추가

파일 이름을 열 헤더로 추가

txt 형식의 테이블이 포함된 디렉토리가 있고 파일 이름을 두 번째 열의 헤더로 추가하고 싶습니다. 예를 들면 다음과 같습니다.

File_1.txt

row_1 1 
row_2 0 
row_3 1  
row_4 1 
row_5 1 
row_6 1

출력.txt

rows  file_1
row_1  1 
row_2  0 
row_3  1  
row_4  1 
row_5  1

나는 이런 것을 생각하고 있었다.

sed 1 's/top_row/$file_name/1' < "$file";

답변1

이는 한 줄을 작성한 rows file_1.txt다음 전체 파일을 출력합니다.

 echo "rows $file"; cat "$file"

위와 같이 출력에서 ​​파일 확장자를 제거하려면 다음을 사용하십시오 basename.

 echo "rows $(basename $file .txt)"; cat "$file"

답변2

for file in ./file_*.txt
do
  awk 'NR==1 { print "rows", FILENAME }; 1' "$file" > temp && mv temp "$file"
done

-i또는 내부 편집을 지원하는 sed를 사용하십시오.

for file in ./file_*.txt
do
  sed -i "1i\
rows $file" "$file"
done

답변3

file_*.txt처리하려는 모든 파일과 일치하고 파일이 탭을 구분 기호로 사용한다고 가정합니다 .

tmpfile=$(mktemp)
for filename in file_*.txt; do
    { printf 'rows\t%s\n' "$filename"; cat "$filename"; } >$tmpfile &&
    mv "$tmpfile" "$filename"
done

이는 일치하는 파일 이름을 반복하고 각 파일에 대해 헤더와 파일 자체의 내용이 포함된 줄을 임시 파일로 출력하여 모든 것이 제대로 진행되면 원본 파일을 대체합니다.

이렇게 하면 원본 파일이 수정됩니다. 귀하의 질문에서 당신은 예제를 제공하고 이것이 에 출력되어야 한다고 말했지만 output.txt결과를 다른 모든 파일에 쓸 위치가 명확하지 않았기 때문에 이 접근 방식을 사용했습니다.

답변4

단지 재미를 위한 이해할 수 없는 펄

perl -i -pe '$.==1&&do{($f=$ARGV)=~s/\..*?$//;$_="rows $f\n$_"};close ARGV if eof' *.txt

관련 정보