Bashスクリプトは、各行の最初の場所を2番目の名前のファイルにエコーします。

Bashスクリプトは、各行の最初の場所を2番目の名前のファイルにエコーします。

次のように構成されたテキストファイルがあります。

Group 1
asdsdsdsdf.html  jeff
xcvxcvxcvx.html  bob
vrgeiuvhif.html  sue

Group 2
iwdowijdoi.html  mary
pokpompojm.html  doug
ndkjfsjfbs.html  lisa

bash各グループの名前を付けたディレクトリを作成するにはスクリプトが必要です。次に、最初の行に、そのリンクとともにグループ内の各人の名前を指定するテキストファイルがあります。

テキストファイルという名前のディレクトリとリンクのみを含むファイルを正常に作成しました。しかし、各リンクを各名前ファイルに反映する方法やグループごとに並べ替える方法がわかりません。

私は私が持っている少ないお金でそれを行うより良い方法があると確信しています。

#!/bin/bash

grep Group list.txt > groups
grep -v Group list.txt > links_names
while read file; do mkdir "${file}"; done < groups
while read line; do export name=`echo $line | awk '{print $2}'`
touch "$name"; done < links_names
while read line; do export link=`echo $line | awk '{print $1}'`
echo "$link" >> links ; done < links_names

rm {groups,links_names,links}

ベストアンサー1

そしてawk

awk '/^Group/{g=$0; system("mkdir \""g"\""); next} g&&$0{print $1 >g"/"$2}' file
  • /^Group/行が文字列で始まる場合Group...
    • g=$0変数をgグループ名(たとえば)に設定しますGroup 1
    • system(...)システム関数呼び出しコマンドを使用してmkdirディレクトリを作成します(グループ名のスペースを処理するための追加の引用符に注意してください)。
  • g&&$0変数が定義されてgいて行が空でない場合...
    • print $1 >g"/"$22番目のフィールド(名前)の値は、最初のフィールド(リンク)の値を$1ディレクトリ名のファイルに書き込みます。g$2

テストを受ける:

$ cat Group\ 2/doug
pokpompojm.html

おすすめ記事