Linux Bash在单独的文件中复制多行

Linux Bash在单独的文件中复制多行,linux,bash,shell,gentoo,Linux,Bash,Shell,Gentoo,我有一个包含以下条目的文件,非常长,因此仅举几个例子: media-libs/gd fontconfig xpm media-sound/audacious -gtk gtk3 net-analyzer/wireshark -gtk3 -ssl -qt4 qt5 lua geoip kerberos adns net-dialup/ppp -gtk 我需要复制一个新文件中的每一行,名为/和第一个空格之间的名称 所以我有一个名为gd、audacious、wires

我有一个包含以下条目的文件,非常长,因此仅举几个例子:

    media-libs/gd fontconfig xpm
    media-sound/audacious -gtk gtk3
    net-analyzer/wireshark -gtk3 -ssl -qt4 qt5 lua geoip kerberos adns
    net-dialup/ppp -gtk
我需要复制一个新文件中的每一行,名为/和第一个空格之间的名称

所以我有一个名为gd、audacious、wireshark和ppp的文件,在名称后面有适当的内容

    media-libs/gd fontconfig xpm
    media-sound/audacious -gtk gtk3
    net-analyzer/wireshark -gtk3 -ssl -qt4 qt5 lua geoip kerberos adns
    net-dialup/ppp -gtk
谢谢你的帮助,祝你周末愉快


Silvio

我想您需要这样的东西,但请在一个单独的目录中尝试,您只需要一份数据副本:

awk '{f=$1;sub(/.*\//,"",f);print > f}' yourFile

它可能没有那么健壮,但它会获取每行的第一个字段,将所有内容都拆分为斜杠,并将其保存为
f
,然后将整行写入文件
f

当您要使用while循环时,您可以查看:

while read -r line; do
        echo "line=${line}"
        noSlash=${line##*/}
        echo "noSlash=${noSlash}"
        filename=${noSlash%% *}
        echo "filename=${filename}"
        content=${noSlash#* }
        echo "Content=${content}"
done < input

谢谢你,工作顺利。一条短线,我从几个小时开始尝试。更简单的方法是使用
-F
选项将每一行拆分为适当的字段,而不是使用
sub
函数:
awk-F'/|“{print>$2}”
@chepner谢谢,是的,这是一种可能性,但我不确定是否有多个斜杠会移动字段编号。
while read -r line; do
        noSlash=${line##*/}
        filename=${noSlash%% *}
        content=${noSlash#* }
        printf "%s\n" "${content}" > "${filename}"
done < input