【问题标题】:awk: print multiple files, each file into a new folder. Folder name extracted from input fileawk:打印多个文件,将每个文件放入一个新文件夹。从输入文件中提取的文件夹名称
【发布时间】:2020-08-02 07:41:54
【问题描述】:

我正在努力将 mkdir 添加到 awk 行中。

输入.txt:

A1 B1
A2 B2
A3 B3

目标:将每一行打印到一个新文件中。每个新文件都应具有相同的名称,例如'文件.txt'。每个新文件都应打印到其自己的新文件夹中。文件夹名称应取自输入文件中相应行的第一个字段。生成的文件夹结构:

home
|__input.txt
|
|__A1
|  |__file.txt
|
|__A2
|  |__file.txt
|
|__A3
|  |__file.txt

我的 awk 使用输入的文件名创建文件:

$ awk '{F = $1".txt"} {print > F}' input.txt

我的 awk 使用输入的文件夹名称创建文件夹:

$ awk '{print "mkdir "$1}' input.txt | sh

但是如何组合这些并使用输入的文件夹名称创建文件夹但保持相同的文件名'file.txt'?

【问题讨论】:

  • 嗯,不确定您的意思?每个“file.txt”文件的内容(括号中)是不同的。但是树中的每个文件都称为'file.txt'
  • 哦,好吧,您应该清楚括号内的位是文件内容,而不是文件名的一部分。在home 内还有一个file.txt。这也应该被创建吗?
  • Soz.你会如何展示它?
  • 我会为./A1/file.txt 显示一个cat 输出,为./A2/file.txt 显示另一个输出,然后说“等等”。

标签: unix awk printing terminal mkdir


【解决方案1】:

您并不是真的“将 mkdir 添加到 awk 行”。您正在将 awk 的输出传送到 shell。我认为这最好用一个 shell 脚本来完成(无论如何你都需要 shell 来调用 mkdir):

input=input.txt
newfile=file.txt
while IFS= read -r line; do
    first="${line% *}"                #This means "the line up to first space"
    mkdir "$first"
    echo "$line" > "$first/$newfile"
done < "$input"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2014-10-06
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多