我遇到了一些代码问题,我不熟悉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