我遇到了一些代碼問題,我不熟悉Linux Bash編程,因此我試圖找不到能夠適合我的任務的東西整天都希望你能幫助我指引正確的方向。根據字段拆分文件並保存在使用根名稱創建的子目錄中
我有很多大文件,我想根據每個文件中的第三個字段進行分割,我想在每個子文件中保留頭文件,並將創建的子文件保存到新目錄中從文件的根名稱創建。
存儲在原始目錄中的初始文件是:
Downloads/directory1/Levels_CHG_Lab_S_sample1.txt
Downloads/directory1/Levels_CHG_Lab_S_sample2.txt
Downloads/directory1/Levels_CHG_Lab_S_sample3.txt
等..
每個文件有200列,且將列3包含通過10. 我從1個值想要根據此列的值拆分上面的每個文件,並將子文件存儲在子文件夾中,例如子文件夾「Downloads/directory1/sample1」將包含10個文件(包含標題行)文件Downloads/directory1/Levels_CHG_Lab_S_sample1.txt。
我已經嘗試了現在許多不同的步驟,這些步驟,沒有成功..我必須使這更復雜,因爲我試過的代碼看起來很乾淨... 這是我正在努力的代碼:
FILES=Downloads/directory1/
for f in $FILES
do
# Create folder with root name by stripping file names
fname=${echo $f | sed 's/.txt//;s/Levels_CHG_Lab_S_//'}
echo "Creating sub-directory [$fname]"
mkdir "$fname"
# Save the header
awk 'NR==1{print $0}' $f > header
# Split each file by third column
echo "Splitting file $f"
awk 'NR>1 {print $0 > $3".txt" }' $f
# Move newly created files in sub directory
mv {1..10}.txt $fname # I have no idea how to do specify the files just created
# Loop through the sub-files to attach header row:
for subfile in $fname
do
cat header $subfile >> tmp_file
mv -f tmp_file $subfile
done
done
所有這些步驟看起來很複雜,對我來說,我非常感謝,如果你能幫助我以正確的方式解決這個問題。非常感謝您的幫助。 -fra
嗨ebarrere,非常感謝你的幫助!它看起來像你明白我的問題,但是當你嘗試你的步驟時,仍然有一些奇怪的事情發生:最後,你的代碼給了我10個子文件,前綴爲「sample1」,還有一個子文件夾,但它看起來像最後一個awk命令沒有做到希望的東西,即將子文件重定向到子文件夾,所以它也不會附加到帶有頭文件的文件中......我嘗試過使用此行的變體filename = dirname $ 3「 .txt「,但它似乎並沒有工作..如果你可以發現爲什麼請讓我知道 – user971102
在awk行,如果我使用filename = dirname $ 3」。txt「已分割的文件不會進入子目錄,而如果我嘗試使用像這樣的$ {dirname}/$ 3的斜線,則會出現」期望換行符或字符串末尾「錯誤 – user971102
看起來像您需要在第7行中添加尾部的'/'到設置的'dirname'變量,如下所示:'dirname =「$ {BASENAME}/$ {dirname} /」'。試試看。 – ebarrere