簡體   English   中英

Bash腳本將txt文件中的第四行導出到csv

[英]Bash Script Export fourth row in txt file to csv

我有一個名為Subj1,Subj2的50個目錄。Subj50每個包含152個文本文件,每個文件都使用以下命名格式命名

regional_vol_GM_atlas1.txt
..
..
regional_vol_GM_atlas152.txt

每個文件具有按4行2列排列的數據,其中列值由空格分隔符分隔

667869 667869
580083 580083
316133 316133
9020 9020

我想將具有標題的每個txt文件的第四行導出到csv文件中,以獲取我擁有的所有50個目錄

我編寫了一個腳本,該腳本可以將每個文本文件中的數據與標頭一起導出,並創建一個CSV文件,但是該腳本將文本文件中的所有數據都輸入並粘貼到CSV文件中,而不是第4行。

#!/bin/bash


# pasting the file name as column name,  
for x in regional_vol_*.txt ; do  


   sed -i "1s/^/${x}\n/" ${x}

done
# Sorting the files and Subj1 directory name is file name of csv file 
paste -d, $(ls -1v regional_vol*.txt ) >> subj1.csv

下圖描述了文件的輸出。Subj1是目錄名

Sub1輸出

您可以使用find在所有子目錄中遞歸查找所需文件,然后使用sed將第1行和最后一行附加到新文件中。

執行所有操作的主要命令是:

$ echo "x" > temp
$ find . -type d -iname "sub*" | sed 's/^.*\///' >> temp
$ find sub1/* -type f -printf "%f\n" | paste -s -d , > data.csv
$ for dir in *; do paste -s -d ',' <(tail -q -n 1 "$dir"/regional_vol_*.txt) >> data.csv; done 2> /dev/null
$ paste -d , temp <(sed '/^\s*$/d' data.csv)
x,regional_vol_GM_atlas1.txt,regional_vol_GM_atlas2.txt
sub1,1 1,2 2
sub2,3 3,4 4

這是我制作的示例結構:

$ ls -R
.:
sub1/  sub2/

./sub1:
regional_vol_GM_atlas1.txt  regional_vol_GM_atlas2.txt

./sub2:
regional_vol_GM_atlas1.txt  regional_vol_GM_atlas2.txt
$ cat sub1/* sub2/*
header1 header1
667869 667869
580083 580083
316133 316133
1 1
header2 header2
667869 667869
580083 580083
316133 316133
2 2
header3 header3
667869 667869
580083 580083
316133 316133
3 3
header4 header4
667869 667869
580083 580083
316133 316133
4 4
$ find sub1/* -type f -printf "%f\n" | paste -s -d , > data.csv
$ for dir in *; do paste -s -d ',' <(tail -q -n 1 "$dir"/regional_vol_*.txt) >> data.csv; done 2> /dev/null
$ cat data.csv 
regional_vol_GM_atlas1.txt,regional_vol_GM_atlas2.txt

1 1,2 2
3 3,4 4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM