나는 이것이 간단해 보이지만 작동하도록 할 수 없거나 기능 옵션을 찾을 수 없다는 것을 알고 있습니다.
Linux UBUNTU 운영 체제, bash 스크립트
문자열을 기준으로 열 번호를 식별해야 합니다. (검색할 열 수는 항상 다릅니다.)
입력 예:
STRING="Boo"
Hi Boo Jiggy
예제 출력:
2
답변1
awk를 사용하세요:
$ string=Boo
$ echo 'Hi Boo Jiggy' | awk -v b="$string" '{for (i=1;i<=NF;i++) { if ($i == b) { print i } }}'
2
검색 문자열을 awk 매개변수로 전달한 다음 입력의 각 필드를 반복합니다. 현재 필드가 검색 매개변수와 동일하면 해당 번호를 인쇄합니다.
참고: 이 방법은 여러 문자열이 있는 경우 검색하지만 하위 문자열에는 작동하지 않습니다.
답변2
사용 tr
및 grep
:
string=Boo
echo "Hi Boo Jiggy" | tr ' ' '\n' | grep -nw "$string" | cut -d':' -f1
@Jesse 버전과 달리 이 변형은 줄 인식을 지원하지 않습니다. 그래서,
echo 'Hi
Boo Jiggy' | tr ' ' '\n' | grep -nw "$string" | cut -d':' -f1
@Jesse의 버전은 1을 출력하는 반면 2를 출력합니다.
이것이 당신에게 중요한지 모르겠습니다.
답변3
방금 솔루션을 스크립트에 넣었습니다. 아마도 도움이 될 것입니다.
#!/bin/sh
[ -z "$1" ] && exit 0
value="$(head -n1 "$1" | grep -Eo '".*"')"
column="$(sed '1d' "$1" | awk '{ for (i=1;i<=NF;i++) if ($i == '$value') print i }')"
echo "Column: $column"
예:
yurij@opensuse-leap65:~/trash/awk> cat example.txt
String="Boo"
Hi Boo Jiggy
yurij@opensuse-leap65:~/trash/awk> ./process.sh ./example.txt
Column: 2
답변4
사용행복하다(이전 Perl_6)
~$ echo "Hi Boo Jiggy Boo" | raku -ne 'put .words.grep(/Boo/, :k);'
1 3
위의 입력은 STDIN
정규식 matcher 에서 제공되고 사용됩니다 Boo
. Raku 코드는 행별로 각 일치 항목의 공백으로 구분된 열을 반환합니다. 반환 시 빈 행은 해당 행에 일치 항목이 없음을 나타냅니다.
일치하는 0 인덱스 열을 반환합니다. (단일 인덱스 열을 반환하려면 .map(* + 1)
코드 끝에 추가하세요.) Raku 코드에서 문자열을 추상화하려면 해당 문자열을 환경 변수로 선언하세요.
~$ echo "Hi Boo Jiggy Boo" | env string="Boo" raku -ne 'put .words.grep(/<{ %*ENV<string> }>/, :k)'
1 3
파일에도 적용됩니다:
~$ env string="Boo" raku -ne 'put .words.grep(/<{ %*ENV<string> }>/, :k)' Hi_Boo_Jiggy_Boo.txt
1 3
마지막으로, 행당 일치 항목이 하나만 있다고 확신하거나 일치하는 첫 번째 열만 반환하려는 경우 .[0]
코드 끝에 색인( 또는 )을 추가하세요.[0]
https://www.nntp.perl.org/group/perl.perl6.users/2020/07/msg9004.html
https://raku.org