安装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错误:“使用DF597815937EC0D2.不能检查签名:没有公钥”。tar xvzf gawk-5.0.1.tar.gzcd gawk-5.0.1sudo 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 en@quot.header en@boldquot.header 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,而它是“命令未找到”。
如何下载和install CSV扩展?
我也尝试gawk -i csv但是错误"gawk:致命:不能打开源代码文件‘`csv’来读取(没有这样的文件或目录)“。
PS1:如何检查已安装的所有扩展列表?PS2:另一个向导说我需要运行rpmbuild..。
摘要:我需要工具,而不是学习黑客。
该工具的Linux名称似乎是gawk-csv,但它的主要库名是gawkextlib。
有两个相互冲突的指南,自述文件和安装-CSV-分机。唯一的下载是为第一个。
PS:有这里有6岁的同性恋,但直到2020年,gawk-csv才是1.0.0版。
它是经典AWK的一个非常重要的扩展,因为通用的CSV文件不仅是"a,b,c",还需要解析标准CSV引号、转义行等等。
AWK是完美的(!),但是用经典的AWK做 impossible <#>of大CSV文件需要gawk。
发布于 2020-03-25 21:48:01
这个菜谱现在对我很管用。YMMV
将DSTPATH更改为要安装该扩展名的任何位置。
我不建议在系统目录中手动安装任何东西(例如。应该只由发行版的工具(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,而且它可能失败的方式有上千种(缺乏适当的开发工具等等)。
发布于 2020-05-27 00:27:45
将关于安装到/usr的争论放在一边--我在构建csv库时发现的主要问题是,Makefile没有指定链接csv.so库时定位D0库所需的运行时路径。这意味着如果不设置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)gawk在/usr/local/lib/gawk/csv.so下找到D6,但是csv.so依赖于libgawkextlib.so.0,而D8不是在运行库路径上。
我在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)因此,我在Ubuntu18.04上的整个过程如下所示,使用了gawk以前从源代码构建并安装在/usr/local/bin/gawk上的版本。还请注意,我已经安装了所有的构建工具,您可能需要使用apt来安装gcc、autoconf、libtool等工具--一个很好的起点是sudo apt install build-essential。
资料来源:
git clone git://git.code.sf.net/p/gawkextlib/code gawkextlib
cd gawkextlib构建库-这里没有什么特别的- 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 texinfohttps://unix.stackexchange.com/questions/574956
复制相似问题