为每一行运行命令?

时间:2017-10-22 17:22:27

标签: regex string bash macos terminal

我有一堆1255-138279.trans.txt个文件,其中包含以下行:

1255-138279-0006 THE SHAPE WENT SLOWLY ALONG BUT WITHOUT MUCH EXERTION FOR THE SNOW THOUGH SUDDEN WAS NOT AS YET MORE THAN TWO INCHES DEEP
1255-138279-0007 AT THIS TIME SOME WORDS WERE SPOKEN ALOUD ONE
1255-138279-0008 TWO THREE
1255-138279-0009 FOUR FIVE
1255-138279-0010 BETWEEN EACH UTTERANCE THE LITTLE SHAPE ADVANCED ABOUT HALF A DOZEN YARDS
1255-138279-0011 HERE THE SPOT STOPPED AND DWINDLED SMALLER
1255-138279-0012 THEN A MORSEL OF SNOW FLEW ACROSS THE RIVER TOWARDS THE FIFTH WINDOW
1255-138279-0013 THE RIVER WOULD HAVE BEEN SEEN BY DAY TO BE OF THAT DEEP SMOOTH SORT WHICH RACES MIDDLE AND SIDES WITH THE SAME GLIDING PRECISION ANY IRREGULARITIES OF SPEED BEING IMMEDIATELY CORRECTED BY A SMALL WHIRLPOOL
1255-138279-0014 THE WINDOW WAS STRUCK AGAIN IN THE SAME MANNER
1255-138279-0015 THEN A NOISE WAS HEARD APPARENTLY PRODUCED BY THE OPENING OF THE WINDOW
1255-138279-0016 SAID THE BLURRED SPOT IN THE SNOW TREMULOUSLY
1255-138279-0017 I ASKED WHICH WAS YOUR WINDOW FORGIVE ME
1255-138279-0018 WELL I SAID THAT YOU MIGHT
1255-138279-0019 O MUST I IT IS WHEN SHALL WE BE MARRIED FRANK
1255-138279-0020 I HAVE MONEY
1255-138279-0021 AND WE LIVE IN TWO PARISHES DO WE WHAT THEN
1255-138279-0022 IF I SAID SO OF COURSE I WILL
1255-138279-0023 THE FACT IS I FORGOT TO ASK
1255-138279-0024 GOOD NIGHT FRANK GOOD NIGHT

对于每一行,我想创建一个名为1255-138279-0008.txt的新文件(或该行开头的代码),并包含该行的其余部分(在本例中为TWO THREE })。

3 个答案:

答案 0 :(得分:2)

shell中这个简单的while循环可以完成这项工作:

while read -r id line; do
   echo "$line" >> "$id.txt"
done < file

答案 1 :(得分:1)

使用

尝试此操作
$ awk '{v=$1; $1=""; print $0 > "path/to/dir/"v".txt"}' file.txt
$ ls -1 path/to/dir/*.txt

答案 2 :(得分:1)

我更喜欢分两步完成。 首先,使用sedawk生成shell脚本:

sed "s/^\s*\(\S\+\)\s\+\(.*\)$/echo '\2' > '\1.txt'/g" input.txt > output.sh

或者符合POSIX标准的正则表达式(没有GNU扩展名):

sed "s/^[[:space:]]*\([^[:space:]]\+\)[[:space:]]\+\(.*\)$/echo '\2' > '\1.txt'/g" input.txt > output.sh

或使用ERE:

sed -E "s/^[[:space:]]*([^[:space:]]+)[[:space:]]+(.*)$/echo '\2' > '\1.txt'/g" input.txt > output.sh

输出:

...
echo 'TWO THREE' > '1255-138279-0008.txt'
echo 'FOUR FIVE' > '1255-138279-0009.txt'
...

然后执行该脚本以生成文件。

. output.sh
相关问题