簡単で客観的な設置方法がありますCSV拡張子gawk
?
やめてください。さらに一歩必要です。
Ubuntu 18 LTSを使用してください。
wget -c http://ftp.gnu.org/gnu/gawk/gawk-5.0.1.tar.gz
(そしてgawk-5.0.1.tar.gz.sig
)gpg --verify gawk-5.0.1.tar.gz.sig gawk-5.0.1.tar.gz
エラー:「RSAキーDF597815937EC0D2を使用して署名を検証できません...:公開鍵がありません。」tar xvzf gawk-5.0.1.tar.gz
cd gawk-5.0.1
sudo su
走った後./configure && make && make check && make install
...
... long long process
...
----------------------------------------------------------------------
Libraries have been installed in:
/usr/local/lib/gawk
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the 'LD_RUN_PATH' environment variable
during linking
- use the '-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to '/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
make install-data-hook
make[4]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extension'
for i in filefuncs.la fnmatch.la fork.la inplace.la intdiv.la ordchr.la readdir.la readfile.la revoutput.la revtwoway.la rwarray.la time.la ; do \
rm -f /usr/local/lib/gawk/$i ; \
done
make[4]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extension'
make[3]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extension'
make[2]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extension'
make[1]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extension'
Making install in extras
make[1]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extras'
make[2]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extras'
make[2]: Nothing to be done for 'install-exec-am'.
/bin/mkdir -p '/usr/local/etc/profile.d'
.././install-sh -c -m 644 gawk.sh gawk.csh '/usr/local/etc/profile.d'
make[2]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extras'
make[1]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extras'
Making install in doc
make[1]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/doc'
make[2]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/doc'
make[2]: Nothing to be done for 'install-exec-am'.
/bin/mkdir -p '/usr/local/share/info'
.././install-sh -c -m 644 ./gawk.info ./gawkinet.info ./gawkworkflow.info '/usr/local/share/info'
install-info --info-dir='/usr/local/share/info' '/usr/local/share/info/gawk.info'
install-info --info-dir='/usr/local/share/info' '/usr/local/share/info/gawkinet.info'
install-info --info-dir='/usr/local/share/info' '/usr/local/share/info/gawkworkflow.info'
/bin/mkdir -p '/usr/local/share/man/man1'
.././install-sh -c -m 644 gawk.1 '/usr/local/share/man/man1'
make[2]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/doc'
make[1]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/doc'
Making install in awklib
make[1]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/awklib'
make[2]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/awklib'
/bin/mkdir -p '/usr/local/libexec/awk'
.././install-sh -c pwcat grcat '/usr/local/libexec/awk'
make install-exec-hook
make[3]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/awklib'
/bin/bash ../mkinstalldirs /usr/local/share/awk
mkdir -p -- /usr/local/share/awk
for i in passwd.awk group.awk ./eg/lib/*.awk ; do \
progname=`echo $i | sed 's;.*/;;'` ; \
.././install-sh -c -m 644 $i /usr/local/share/awk/$progname ; \
done
make[3]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/awklib'
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/awklib'
make[1]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/awklib'
Making install in po
make[1]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/po'
installing ca.gmo as /usr/local/share/locale/ca/LC_MESSAGES/gawk.mo
installing da.gmo as /usr/local/share/locale/da/LC_MESSAGES/gawk.mo
installing de.gmo as /usr/local/share/locale/de/LC_MESSAGES/gawk.mo
installing es.gmo as /usr/local/share/locale/es/LC_MESSAGES/gawk.mo
installing fi.gmo as /usr/local/share/locale/fi/LC_MESSAGES/gawk.mo
installing fr.gmo as /usr/local/share/locale/fr/LC_MESSAGES/gawk.mo
installing id.gmo as /usr/local/share/locale/id/LC_MESSAGES/gawk.mo
installing it.gmo as /usr/local/share/locale/it/LC_MESSAGES/gawk.mo
installing ja.gmo as /usr/local/share/locale/ja/LC_MESSAGES/gawk.mo
installing ko.gmo as /usr/local/share/locale/ko/LC_MESSAGES/gawk.mo
installing ms.gmo as /usr/local/share/locale/ms/LC_MESSAGES/gawk.mo
installing nl.gmo as /usr/local/share/locale/nl/LC_MESSAGES/gawk.mo
installing pl.gmo as /usr/local/share/locale/pl/LC_MESSAGES/gawk.mo
installing pt.gmo as /usr/local/share/locale/pt/LC_MESSAGES/gawk.mo
installing pt_BR.gmo as /usr/local/share/locale/pt_BR/LC_MESSAGES/gawk.mo
installing sv.gmo as /usr/local/share/locale/sv/LC_MESSAGES/gawk.mo
installing vi.gmo as /usr/local/share/locale/vi/LC_MESSAGES/gawk.mo
installing zh_CN.gmo as /usr/local/share/locale/zh_CN/LC_MESSAGES/gawk.mo
if test "gawk" = "gettext-tools"; then \
/bin/mkdir -p /usr/local/share/gettext/po; \
for file in Makefile.in.in remove-potcdate.sin quot.sed boldquot.sed [email protected] [email protected] insert-header.sin Rules-quot Makevars.template; do \
.././install-sh -c -m 644 ./$file \
/usr/local/share/gettext/po/$file; \
done; \
for file in Makevars; do \
rm -f /usr/local/share/gettext/po/$file; \
done; \
else \
: ; \
fi
make[1]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/po'
Making install in test
make[1]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/test'
make[2]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/test'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/test'
make[1]: Leaving directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/test'
問題ないようです。私のテストはgawk --version
4.1.1で行われ、現在は5.0.1で行われました。上記のダンプに示すように、make[4]: Entering directory '/home/admin_dq/transfer/AWK/gawk-5.0.1/extension'
拡張ライブラリがあるようです。
しかし、今の元の問題は次のとおりです。が必要gawk-csv
ですが、「コマンドが見つかりません」です。
ダウンロード方法とCSV拡張機能をインストールしますか?
私も試しましたが、gawk -i csv
エラーがあります。"gawk:致命的:読み取りのために 'csv'ソースファイルを開くことができません(そのファイルまたはディレクトリはありません)。」。
PS1:インストールされているすべての拡張リストを表示するには? PS2:その他のガイド走らなければならないと言いましたrpmbuild
…
ノート
要約:ハッキング技術を学ぶのではなく、ツールが必要です。
ツールのLinux名は同じように見えますが、gawk-csv
デフォルトライブラリの名前はですgawkextlib
。
2つの矛盾する指示があります。閲覧ファイルそしてCSV拡張機能のインストール。初めてのみダウンロードできます。
PS:はい6年前の質問はここにありますただし、バージョン1.0.0は2020年までリリースされていませんgawk-csv
。
CSVが重要です
これは非常に重要な拡張ですクラシックAWKa,b,c
、通常のCSVファイルは、AWKが解析する必要があるのではありません。標準CSV引用符、エスケープされた行など
AWKは完璧だが(!)できない簡単なETL操作大容量CSVファイルクラシックAWKの場合は、次のものが必要です。gawk-csv。
答え1
このレシピは今私にとって効果的です。 YMMV。
DSTPATH
拡張機能をインストールする場所に変更します。
インストールはお勧めできません何もないシステムディレクトリ(例:下/usr
)を手動で入力します。展開ツール(など)を介してのみ管理できapt
ますyum
。
DSTPATH=/tmp/baz
set -e
git clone https://git.code.sf.net/p/gawkextlib/code gawkextlib-code
cd gawkextlib-code/lib
autoreconf -i
./configure --prefix=$DSTPATH && make -j13 install
cd ../csv
autoreconf -i
./configure --prefix=$DSTPATH --with-gawkextlib=$DSTPATH && make -j13 install
export AWKPATH=$DSTPATH/share/awk AWKLIBPATH=$DSTPATH/lib/gawk
echo foo,bar,baz | gawk -i csv 'csvsplit($0,a){print a[2]}'
IMHO これはすべて過剰であり、失敗する可能性のある方法が何千ものあります(適切な開発ツールの欠如など)。
答え2
/ usrにインストールすることについての議論は、おそらく - csvライブラリを構築するときに見つけた主な問題は、Makefileが指定しなかったことです。走るライブラリをリンクするときにgawkextlibを見つけるために必要なパスですcsv.so
。これは、設定がないと、LD_LIBRARY_PATH
ビルドとインストールが成功したように見えても実行csv.so
時に見つからないことを意味します。libgawkextlib.so.0
その結果、gawkを呼び出すと次のエラーが発生します。
gawk: csv:15: fatal: load_ext: cannot open library `/usr/local/lib/gawk/csv.so' (libgawkextlib.so.0: cannot open shared object file: No such file or directory)
csv.so
/usr/local/lib/gawk/csv.so
gawkはそれを探して、ランタイムライブラリのパスにないものが何であるかcsv.so
によって異なります。libgawkextlib.so.0
この問題を解決するためのオプションが見つからず、configure
最終的にmake出力でリンクラインを再実行しましたが、以下を追加しました。
-Wl,-rpath,/usr/local/lib
-Wl
次のオプションをのリンクに直接送信しますgcc
。
したがって、行全体は次のようになります。
gcc -shared -fPIC -DPIC .libs/csv.o .libs/csv_parser.o .libs/csv_convert.o .libs/csv_split.o .libs/csv_input.o .libs/strbuf.o .libs/awk_fieldwidth_info.o -L/usr/local/lib/ -Wl,-rpath,/usr/local/lib -L/usr/local/bin -lgawkextlib -g -O2 -Wl,-soname -Wl,csv.so -o .libs/csv.so
その後、ライブラリ検索パスを操作せずに見つけることcsv.so
ができます。libgawkextlib.so.0
$ ldd csv.so
linux-vdso.so.1 (0x00007ffda36e6000)
libgawkextlib.so.0 => /usr/local/lib/libgawkextlib.so.0 (0x00007ffb8f535000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffb8f144000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffb8f93d000)
Ubuntu 18.04の全体的なプロセスは次のとおりです。ソースからビルドして/usr/local/bin/gawk
。apt
であるsudo apt install build-essential
。
ソースのインポート:
git clone git://git.code.sf.net/p/gawkextlib/code gawkextlib
cd gawkextlib
libビルド - ここには素晴らしい内容はありません。with-gawk
システムバージョンではなく、gawkのコンパイル済みバージョンを使用していることを確認してください。
cd lib
autoreconf -i
./configure --with-gawk=/usr/local/bin/
make
sudo make install
ライブラリパッチを使用してcsv拡張をビルドします。
cd ../csv
autoreconf -i
./configure --with-gawk=/usr/local/bin/ --with-gawkextlib=/usr/local/lib/
make
gcc -shared -fPIC -DPIC .libs/csv.o .libs/csv_parser.o .libs/csv_convert.o .libs/csv_split.o .libs/csv_input.o .libs/strbuf.o .libs/awk_fieldwidth_info.o -L/usr/local/lib/ -Wl,-rpath,/usr/local/lib -L/usr/local/bin -lgawkextlib -g -O2 -Wl,-soname -Wl,csv.so -o .libs/csv.so
sudo make install
成功:
$ echo foo,bar,baz | gawk -i csv 'csvsplit($0,a){print a[2]}'
bar
最後のヒント - makeinfo
Ubuntuでインストールしないのに問題がある場合:
sudo apt-get install texinfo