我寫了一個腳本,將檢查的內容$path和列印i 1中所提到的檔案中值$path。
#! /bin/bash
echo "Enter number of records"
read num
count=1
while [ $count -le $num ]
do
echo "Enter path"
read path
var2=`echo "${path##*/}"`
var3=`awk '{for(i=1;i<NF;i ) if ($i == "'${var2}'"} print $(i 1)}' ${path} | head -1`
echo "done,$var3" >> result.csv
((count ))
done
如果值$path是/c/training/sample.sh或/c/training/textfile,與下面的內容
示例檔案
#!/bin/bash
#sample.sh 120
<psuedo-code>
文本檔案.txt
textfile.txt 0
This is random text
result.csv或輸出 csv 檔案的外觀
done,120
done,0
因此,如果它們存盤在單獨的 csv 檔案中,則不是每次都讀取路徑,而是如何讀取所有路徑。
樣本輸入.csv
/c/training/sample.sh,User1
/c/training/textfile.txt,USer2
我如何實作awk上面提到的,以便它讀取Sampleinput.csv 的欄位 1 中的每個值并執行相同的操作
uj5u.com熱心網友回復:
一種更通用和可用的安排是將路徑作為引數傳遞給腳本。
#!/bin/sh
awk 'FNR == 1 { path=FILENAME; sub(/.*\//, "", path) }
$0 ~ path && / [0-9] $/ { print path "," 0 $NF; nextfile }' "$@"
該nextfile陳述句包含在 POSIX 中,但如果您使用的是非常舊的 awk 或使用非 POSIX 系統,則可能不支持該陳述句。
用法:
scriptname /c/training/sample.sh /c/training/textfile >>result.csv
uj5u.com熱心網友回復:
我認為這就是您嘗試使用 GNU awk 為 gensub()、ARGIND、nextfile 和 ENDFILE 執行的操作(未經測驗):
#!/usr/bin/env bash
IFS= read -p 'Enter number of records: ' -r num
awk -v maxFiles="$num" '
BEGIN { OFS="," }
ARGIND == 1 {
if ( ARGC < maxFiles ) {
ARGV[ARGC ] = gensub(/,.*/,"",1)
}
next
}
FNR == 1 {
fname = gensub(".*/","",1,FILENAME)
}
{
for (i=1; i<=NF; i ) {
if ( gensub(/^# /,"",1,$i) == fname ) {
val = $(i 1)
nextfile
}
}
}
ENDFILE {
if ( ARGIND > 1 ) {
print "done", val
}
val = 0
}
' Sampleinput.csv > result.csv
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357974.html
