bash
형식 이 지정된 스프레드시트의 열을 선택하여 목록을 만드는 스크립트는 어떻게 작성합니까 csv
?
csv
다음 내용이 포함된 파일이 있는 경우 :
[user]$ cat list1.csv
Last, First, user
lname1, fname1, user1
lname2, fname2, user2
[user]$ cat list2.csv
Last, First, user
lname3, fname3, user3
lname4, fname4, user4
그리고 스크립트가 다음과 같이 호출되기를 원합니다.CreateList <column> <file1> <file2> ...
예를 들어 :
[user]$ CreateList 2 list2.csv list1.csv
list2: fname3, fname4
list1: fname1, fname2
답변1
은 아니지만 sh
실행할 수 있습니다 bash
.bash
$ cat CreateList
#!/bin/sh
col="$1"; shift
for file
do
echo -n "$file:"
cut -d, -f"$col" "$file" | sed 1d | tr '\n' ','| sed '$ s/,$//'
echo
done
$
$ head -9 list*.csv
==> list1.csv <==
Last,First,user
lname1,fname1,user1
lname2,fname2,user2
==> list2.csv <==
Last,First,user
lname3,fname3,user3
lname4,fname4,user4
$
$ sh CreateList 2 list2.csv list1.csv
list2.csv:fname3,fname4
list1.csv:fname1,fname2
$
답변2
간단하게 awk를 적절하게 호출하세요.
# print first column:
cat list1.csv | awk '{ORS="\t"} {print $1}'
또는 완전한 스크립트로:
#!/bin/bash
column=$1
shift;
for item in "$@" ; do
#process item
echo "Processing $item:"
cat $item | awk '{ORS="\t"} {print "'"$column"'"}'
done
도움이 되는:
https://stackoverflow.com/questions/2021982/awk-without-printing-newline https://stackoverflow.com/questions/19075671/how-to-use-shell-variables-in-awk-script
답변3
가장 우아한 솔루션은 아닐 수도 있지만 공백을 포함하여 지정한 정확한 출력을 제공합니다.
#!/bin/bash
function CreateList()
{
col="$1"
shift
cut -d ',' -f $col $@ | sed -r '1d ; s/^[ ]+|[ ]$// ; y/\n/ /; s/[ ]+$/\n/' | xargs echo | sed 's/ /, /'
}
for f in list2.csv list1.csv
do
echo -n "${f//.csv}: "
CreateList 2 "$f"
done
산출:
list2: fname3, fname4
list1: fname1, fname2
답변4
단순한 bash
:
#!/bin/bash
clm=$(($1 - 1))
shift
for file
do
printf "%s: " "$file"
unset res
{
read
while IFS=,\ read -a line
do
res=(${res[*]} ${line[$clm]})
done
} <"$file"
printf "%b, " "${res[@]}"\\n\\c
done