Bash

Bash腳本將每行的第一個位置回顯到具有第二個名稱的文件中

  • December 8, 2018

我有一個組織如下的文本文件:

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}

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"/"$2通過第二個欄位(名稱)的值將第一個欄位$1(連結)中的值寫入目錄名稱中的文件。g``$2

考試:

$ cat Group\ 2/doug
pokpompojm.html

引用自:https://unix.stackexchange.com/questions/236230